iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
0
Modern Web

來個Django Web介面測試吧系列 第 6

來個Django Web介面測試吧:Day06-Django 視圖(view)之2

  • 分享至 

  • xImage
  •  

CSRF生成語法

  • 這是屬於Django Template 的語法,在form標籤中加入此段語法 {% csrf_token %}
    https://ithelp.ithome.com.tw/upload/images/20190907/20102269wLxuKyd931.jpg
  • 在進行輸入帳號密碼及登錄,就不會跳出403錯誤,另外透過chrome除錯工具查看,可以看到如下圖所示,From Data有出現csrfmiddlewaretoken:欄位,而後面是雜湊值,這代表CSRF的欄位。
    https://ithelp.ithome.com.tw/upload/images/20190907/20102269bNmV5iK6Up.jpg
  • 想忽略檢查CSRF可至settings.py註解如下圖的程式碼。
    https://ithelp.ithome.com.tw/upload/images/20190907/20102269JzsK8TVo0n.jpg

完成登錄頁面

開始前,先給個大補貼:關於path與url還不熟悉的朋友,可以參考BY大第十屆鐵人賽的文章:,連結如下:

  • HelloWord\urls.py 路徑下修改程式碼如下圖:
    https://ithelp.ithome.com.tw/upload/images/20190907/20102269JQBxK7TQxB.jpg

  • sign\urls.py 路徑下修改程式碼如下圖:
    https://ithelp.ithome.com.tw/upload/images/20190907/20102269gj3x8FNgtK.jpg

  • sign\views.py路徑下新增程式碼:
    https://ithelp.ithome.com.tw/upload/images/20190907/201022699U4NeI9p5a.jpg
    -程式碼如下:

    def login_page(request):
    if request.method == 'POST':
        id = request.POST.get('id','')
        password = request.POST.get('password','')
        if id == 'admin' and password == '12345678':
            return HttpResponse('登錄成功')
        else:
            return render(request,"index.html",{'error':'帳號或密碼輸入錯誤'})
    
  • 到路徑 http://127.0.0.1:8000/sign 測試登錄頁面

    • 登錄成功測試:

      • 預設成功帳號:admin
      • 預設成功密碼:12345678
        https://ithelp.ithome.com.tw/upload/images/20190907/20102269YAFI3xXqYy.jpg
      • 登錄成功後的畫面
        https://ithelp.ithome.com.tw/upload/images/20190907/20102269TDtvSCjwn5.jpg
    • 登錄失敗測試:

      • 預設帳號:隨意
      • 預設密碼:隨意
        https://ithelp.ithome.com.tw/upload/images/20190907/201022690mq175Z5Ds.jpg
      • 登錄失敗,會顯示如下圖提示:
        https://ithelp.ithome.com.tw/upload/images/20190907/201022695wGxB18Td2.jpg

上一篇
來個Django Web介面測試吧:Day05-Django 視圖(view)之1
下一篇
來個Django Web介面測試吧:Day07-Django 視圖(view)之3
系列文
來個Django Web介面測試吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
rtfgvb74125
iT邦新手 4 級 ‧ 2022-12-05 15:52:50

您好我想請教,我按照您的方法製作一個簡易的form傳輸功能,測試了get的確會把值顯示在網址那邊,但post的時候值卻好像沒有順利傳輸出去,只是不斷刷新index請問我有哪個步驟做錯了。
以下是我的程式

# views.py

from django.shortcuts import render
from django.template import loader
from django.http import HttpResponse # impoty HttpResponse套件用於迴船資訊
# Create your views here.
def index(request):
    # return HttpResponse("Hello Djengo") #要回傳的東西
    # template = loader.get_template('index.html')
    # return HttpResponse(template.render())
    return  render(request, 'index.html')

def login_page(request):
    if request.method == "POST":
        id = request.method.POST.get('id','')
        password = request.method.POST.get('password','')
        if id == 'admin' and password =='1234':
            return HttpResponse('登入成功')
        else:
            return render(request,'index.html',{'error ':'帳號密碼錯誤'})
# index.html

<form method="POST" action="login_page/">
    {{form}}
    <input type="text" name="id" placeholder="請輸入帳號"><br>
    <input type="text" name="password" placeholder="請輸入密碼"><br>
    <button id="btn" type="submit" name="button">login</button>
    {% csrf_token %}
  </form>
# app urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name = 'index'),
    path('login_page/', views.login_page, name = 'login_page')
]

我要留言

立即登入留言